#include <iostream>
#include <vector>


void PrintVec(std::vector<std::vector<int>>& vec) {
	for (int i = 0; i < vec.size(); i++) {
		for (int j = 0; j < vec[0].size(); j++) {
			std::cout << vec[i][j] << " ";
		}
		std::cout << std::endl;
	}
}


//静态二维数组
void Test01() {
	//行和列都是固定的
	int arr[3][4] = {};

	//赋值
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			arr[i][j] = i * 4 + j + 1;
		}
	}

	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++) {
			std::cout << arr[i][j] << " ";
		}
		std::cout << std::endl;
	}
}

//动态二维数组 创建方式一
void Test02() {
	//行是固定的，列是可变的
	std::vector<int> arr[3];

	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 6; j++) {
			arr[i].push_back(i * 4 + j + 1);
		}
	}

	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 6; j++) {
			std::cout << arr[i][j] << " ";
		}
		std::cout << std::endl;
	}
}

//动态二维数组 创建方式二,全部用vector
void Test03() {
	//行是可变的，列是可变的
	std::vector<std::vector<int>> vec;

	std::vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	vec.push_back(v1);

	std::vector<int> v2;
	v2.push_back(4);
	v2.push_back(5);
	v2.push_back(6);
	vec.push_back(v2);

	PrintVec(vec);

}

//行写出来，列不写
//行写出来的好处是:1,可以获取size;2,可以用索引取值，比如vec[0]
void Test04() {
	std::vector<std::vector<int>> vec(3, std::vector<int>());

	for (int k = 0; k <6 ; k++) {
		vec[0].push_back(999);
	}
	

	for (int i = 1; i < vec.size(); i++) {
		for (int j = 0; j < 6; j++) {
			vec[i].push_back(i * 4 + j + 1);
		}
	}

	std::vector<int> last(6, 33);
	vec.push_back(last);

	PrintVec(vec);

}

//行和列都写出来
void Test05() {
	//3行6列,每一列都是0
	std::vector<std::vector<int>>
	vec(3, std::vector<int>(6, 0));

	PrintVec(vec);
}

/*
二维数组的基础操作
*/
int main() {

	Test01();

	//Test02();

	//Test03();

	//Test04();

//	Test05();

	return 0;
}